package 第一周;

import java.util.Arrays;

/**
 * @author xhw
 * @date 2024/2/23
 */

public class 移动零 {
    //给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
    //
    //请注意 ，必须在不复制数组的情况下原地对数组进行操作。
    //
    //
    //
    //示例 1:
    //
    //输入: nums = [0,1,0,3,12]
    //输出: [1,3,12,0,0]
    //示例 2:
    //
    //输入: nums = [0]
    //输出: [0]
    //
    //
    //提示:
    //
    //1 <= nums.length <= 104
    //-231 <= nums[i] <= 231 - 1

    public static void main(String[] args) {
        int[] nums = {0, 1, 0, 3, 2};
        int[] nums1 = {0};

        moveZeroes(nums);
        moveZeroes(nums1);

        //断言结果
        assert Arrays.equals(nums, new int[]{1, 3, 2, 0, 0});
    }

    private static void moveZeroes(int[] nums) {
        int index = 0;
        int end = nums.length - 1;

        //两个数字，一个从前往后一个从后往前
        //遍历数组，非零的属性直接放到数组里，index++；零的属性放到数组后面，end--
        while (index < end) {
            if (nums[index] == 0) {
                for (int i = index; i < end; i++) {
                    nums[i] = nums[i + 1];
                }
                nums[end] = 0;
                end--;
            } else {
                index++;
            }
        }



    }
}
